package com.sjb.cp.service;

import com.sjb.cp.model.po.Space;
import com.sjb.cp.model.po.User;
import com.sjb.cp.model.request.analyze.*;
import com.sjb.cp.model.vo.*;

import java.util.List;

/**
 * @Author:sjb
 * @CreateTime:2025-02-12
 * @Description: 空间分析服务
 * @Version：1.0
 */
public interface SpaceAnalyzeService {


    /**
     * 空间分析权限校验
     * @param spaceAnalyzeRequest
     * @param loginUser
     */
    void checkSpaceAnalyzeAuth(SpaceAnalyzeRequest spaceAnalyzeRequest, User loginUser);

    /**
     * 查询空间使用情况分析
     * @param spaceAnalyzeRequest
     * @param loginUser
     * @return
     */
    SpaceUsageAnalyzeVo getSpaceUsageAnalyze(SpaceAnalyzeRequest spaceAnalyzeRequest,
                                             User loginUser);

    /**
     * 获取图片类别分析
     * @param spaceCategoryAnalyzeRequest
     * @param loginUser
     * @return
     */
    List<SpaceCategoryAnalyzeVo> getSpaceCategoryAnalyzeList(SpaceCategoryAnalyzeRequest spaceCategoryAnalyzeRequest,
                                                             User loginUser);

    /**
     * 获取空间标签类别分析
     * @param spaceTagAnalyzeRequest
     * @param loginUser
     * @return
     */
    List<SpaceTagAnalyzeVo> getSpaceTagAnalyzeList(SpaceTagAnalyzeRequest spaceTagAnalyzeRequest,
                                                   User loginUser);


    /**
     * 获取空间大小类别分析
     * @param spaceSizeAnalyzeRequest
     * @param loginUser
     * @return
     */
    List<SpaceSizeAnalyzeVo> getSpaceSizeAnalyze(SpaceSizeAnalyzeRequest spaceSizeAnalyzeRequest,
                                           User loginUser);


    /**
     * 用户上传行为分析
     * @param spaceUsageAnalyzeRequest
     * @param loginUser
     * @return
     */
    List<SpaceUserAnalyzeVo> getSpaceUserAnalyze(SpaceUsageAnalyzeRequest spaceUsageAnalyzeRequest,
                                                 User loginUser);

    /**
     * 管理员获取空间前N的使用分析
     * @param spaceRankAnalyzeRequest
     * @param loginUser
     * @return
     */
    List<Space> getTopSpace(SpaceRankAnalyzeRequest spaceRankAnalyzeRequest, User loginUser);
}
